package com.zhanglijie.base.volatileLearn;

/**
 * @author zhanglijie
 * @version 1.0
 * @since 1.1.0 2022/5/27 0027 0:08
 * 验证x86只有写读屏障，对于其他写写操作，读读操作，读写操作是不会发生指令重排或者内存可见性问题
 * 本案例：验证写写 和读读不会有问题，x86内部保证
 * 线程1执行: a=1，b=1
 * 线程2执行： while(b==0）coninue; assert(a==1）
 * 前提：线程1初始有b=0   线程2初始有a=0
 */
public class Sure86Fence {
    static int a=-1;
    static int b=-1;


    public static void main(String[] args) throws InterruptedException {
      for(;;){
          a = 0;
          b = 0;
        Thread t1=  new Thread(()->{
             a=1;
             b=1;
         });
          Thread t2=  new Thread(()->{
              while(b==0)
              {continue;}
              if(a==0){
                  System.out.println("发生指令重排|内存可见性问题 ");
              }
          }) ;
          t1.join();
          t2.join();
      }
    }
}
